package cn.hqm.hqmtechnology.service.impl;

import cn.hqm.hqmtechnology.dao.dto.VersionDTO;
import cn.hqm.hqmtechnology.dao.mapper.VersionMapper;
import cn.hqm.hqmtechnology.dao.po.Version;
import cn.hqm.hqmtechnology.dao.vo.VersionVO;
import cn.hqm.hqmtechnology.service.VersionService;
import cn.hqm.hqmtechnology.utils.IdGen;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@Service
public class VersionServiceImpl extends ServiceImpl<VersionMapper, Version> implements VersionService {

    @Override
    public Object versionAdd(VersionDTO versionDTO) {
        Version version = new Version();
        BeanUtils.copyProperties(versionDTO,version);
        version.setId(IdGen.id());
        version.setStatus(0);
        version.setCreateTime(LocalDateTime.now());
        return this.save(version);
    }

    @Override
    public Object versionPage(VersionDTO versionDTO) {
        Page<Version> versionPage = new Page<>();
        versionPage.setCurrent(versionDTO.getPageNo()).setSize(versionDTO.getPageSize());
        Version version = new Version();
        BeanUtils.copyProperties(versionDTO,version);

        Page<Version> page = this.page(versionPage, new LambdaQueryWrapper<Version>().setEntity(version));
        ArrayList<VersionVO> versionVOS = new ArrayList<>();
        for (Version v : page.getRecords()) {
            VersionVO versionVO = new VersionVO();
            BeanUtils.copyProperties(v,versionVO);
            versionVO.setId(v.getId().toString());
            versionVOS.add(versionVO);
        }
        Page<VersionVO> versionPageVO = new Page<>();
        BeanUtils.copyProperties(page,versionPageVO);
        versionPageVO.setRecords(versionVOS);

        return versionPageVO;
    }

    @Override
    public Object versionList(VersionDTO versionDTO) {
        List<Version> list = this.list(
                new LambdaQueryWrapper<Version>()
                        .eq(Objects.nonNull(versionDTO.getStatus()),Version::getStatus,versionDTO.getStatus())
        );
        ArrayList<VersionVO> versionVOS = new ArrayList<>();
        for (Version version : list) {
            VersionVO versionVO = new VersionVO();
            BeanUtils.copyProperties(version,versionVO);
            versionVO.setId(version.getId().toString());
            versionVOS.add(versionVO);
        }
        return versionVOS;
    }

    @Override
    public Object versionOver(VersionDTO versionDTO) {
        return this.update(
                new LambdaUpdateWrapper<Version>().eq(Version::getId,versionDTO.getId())
                        .set(Version::getStopTime,LocalDateTime.now())
                        .set(Version::getStatus,1)
        );
    }
}